#ifndef DELAUNAY_H
#define DELAUNAY_H

#include "grupo.h"
#include "jarvis.h"
#include "structs.h"
#include <QList>
#include <QSet>

class Delaunay
{
private:
    QString grupo_nome;
    QList<Point> vertices;
    QList< QSet<int> > arestas_respostas;
    QList<triangulo> triangulos;

    void imprimirVertices(const QList<int>& L);

    // Funções das arestas:
    void addAresta(QList< QSet<int> >& lista_arestas, int a,int b);
    void delAresta(QList< QSet<int> >& lista_arestas, int a,int b);
    bool existeAresta(const QList< QSet<int> >& lista_arestas, int a,int b) const;
    void imprimirArestas();

    QList<int> calcularAnguloMax(aresta a);

    void formarTriangulo(int p, aresta a);

    // Para um dado ID de ponto, retorna uma lista com os ids
    // de suas arestas ordenados em um dos dois sentidos:
    QList<int> arestasAntiHorario(int ponto_id);
    QList<int> arestasHorario(int ponto_id);
    bool arestaCruzada(aresta a,aresta b);
    bool arestaValida(aresta a);
    bool existeTriangulo(int p,aresta a);
    bool comparaTriangulo(const triangulo& t1, const triangulo& t2);

public:
    Delaunay(Grupo g);
    const QList<Point>& getVertices();
    const QList< QSet<int> >& getArestas();
    const QList<triangulo>& getTriangulos();
    void triangularizar();
};

#endif // DELAUNAY_H
